package com.whfc.common.util;

import com.github.pagehelper.PageInfo;
import com.whfc.common.result.PageData;

import java.util.Collections;
import java.util.List;

public class PageUtil {

    /**
     * 构造分页查询结果
     *
     * @param pageInfo
     * @param <T>
     * @return
     */
    public static <T> PageData<T> pageData(PageInfo<T> pageInfo) {
        PageData<T> pageData = new PageData<>();
        pageData.setList(pageInfo.getList());
        pageData.setTotal(pageInfo.getTotal());
        pageData.setPages(pageInfo.getPages());
        pageData.setPageNum(pageInfo.getPageNum());
        pageData.setPageSize(pageInfo.getPageSize());
        return pageData;
    }

    /**
     * 空分页数据
     *
     * @return 空的分页数据
     */
    public static <T> PageData<T> emptyPage() {
        PageData<T> pageData = new PageData<>();
        pageData.setList(Collections.emptyList());
        pageData.setPages(0);
        pageData.setTotal(0L);
        return pageData;
    }

    /**
     * 使用分页
     *
     * @param pageNum
     * @param pageSize
     * @param list
     * @param <T>
     * @return
     */
    public static <T> PageData<T> initPageInfo(int pageNum, int pageSize, List<T> list) {
        int total = list.size();
        // 默认如果当前页小于0则为第一页
        pageNum = pageNum <= 0 ? 1 : pageNum;
        // 默认如果当前页大于最大的页数为当前页
        pageNum = pageNum > (total + pageSize - 1) / pageSize ? (total + pageSize - 1) / pageSize : pageNum;
        // 将需要分页的数组进行截取处理
        int fromIndex = 0;
        int toIndex = 0;
        if (total / pageSize == 0 && total % pageSize > 0) {
            // 表示当前数据只有一页
            fromIndex = 0;
            toIndex = total;
        } else if (total / pageSize >= 1 && total % pageSize >= 0) {
            // 超过一页
            fromIndex = (pageNum - 1) * pageSize;
            toIndex = pageNum * pageSize >= total ? total : pageSize * pageNum;
        }
        // 真正需要分页显示的数据
        List<T> tempList = list.subList(fromIndex, toIndex);
        // 结果集(每页显示的数据)
        PageData<T> pageData = new PageData<>();
        pageData.setList(tempList);
        // 当前页
        pageData.setPageNum(pageNum);
        // 每页的数量
        pageData.setPageSize(pageSize);
        // 当前页的数量
        pageData.setTotal((long) total);
        // 总页数
        pageData.setPages((total + pageSize - 1) / pageSize);
        return pageData;
    }
}
